#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
配置模块主入口
整合所有配置相关组件，提供统一接口
"""

from .category_parser import CategoryConfigParser
from .config_manager import CategoryConfigManager, category_config_manager
from .config_hotreloader import ConfigHotReloader
from .config_validator import ConfigValidator, ConfigValidationError

__all__ = [
    # 解析器
    'CategoryConfigParser',
    # 配置管理器
    'CategoryConfigManager',
    'category_config_manager',  # 全局单例实例
    # 热更新器
    'ConfigHotReloader',
    # 验证器
    'ConfigValidator',
    'ConfigValidationError'
]

# 默认配置文件路径
DEFAULT_CONFIG_PATH = '../../data/编码类目表.txt'


def get_config_manager() -> CategoryConfigManager:
    """
    获取全局配置管理器实例
    
    Returns:
        CategoryConfigManager: 配置管理器实例
    """
    return category_config_manager


def initialize_config(config_path: str = DEFAULT_CONFIG_PATH) -> CategoryConfigManager:
    """
    初始化配置系统
    
    Args:
        config_path: 配置文件路径
        
    Returns:
        CategoryConfigManager: 配置管理器实例
    """
    # 获取配置管理器
    manager = get_config_manager()
    
    # 加载配置
    manager.load_config(config_path)
    
    # 返回管理器实例
    return manager


def validate_current_config() -> tuple[bool, list[str]]:
    """
    验证当前加载的配置
    
    Returns:
        tuple[bool, list[str]]: (是否有效, 错误列表)
    """
    manager = get_config_manager()
    config = manager.get_config()
    
    validator = ConfigValidator()
    return validator.validate_config(config)


def generate_config_report() -> str:
    """
    生成当前配置的验证报告
    
    Returns:
        str: 验证报告
    """
    manager = get_config_manager()
    config = manager.get_config()
    
    validator = ConfigValidator()
    return validator.generate_validation_report(config)


def start_config_hotreload(config_path: str = DEFAULT_CONFIG_PATH) -> ConfigHotReloader:
    """
    启动配置热更新监控
    
    Args:
        config_path: 要监控的配置文件路径
        
    Returns:
        ConfigHotReloader: 热更新器实例
    """
    hotreloader = ConfigHotReloader()
    
    # 配置更新回调函数
    def on_config_update(new_config):
        manager = get_config_manager()
        manager.set_config(new_config)
        print(f"配置已更新，现在包含 {len(new_config)} 个类目")
    
    # 设置监控
    hotreloader.watch_config_file(config_path, on_config_update)
    
    # 启动监控
    hotreloader.start()
    
    return hotreloader


# 使用示例
if __name__ == '__main__':
    try:
        print("初始化配置模块...")
        
        # 初始化配置
        manager = initialize_config()
        
        # 生成配置报告
        print("\n配置报告:")
        report = generate_config_report()
        print(report)
        
        # 显示部分配置信息
        config = manager.get_config()
        
        print("\n配置摘要:")
        print(f"类目总数: {len(config)}")
        
        # 显示每个类目的基本信息
        for category_name, category_data in config.items():
            is_required = "✓" if category_data.get('required', False) else "✗"
            option_count = len(category_data.get('options', {}))
            
            # 计算总关键词数
            total_keywords = 0
            for option_data in category_data.get('options', {}).values():
                total_keywords += len(option_data.get('keywords', []))
            
            print(f"  - {category_name} [必填: {is_required}, 选项: {option_count}, 关键词: {total_keywords}]")
        
        # 获取第一个必填类目的详细信息
        required_categories = [k for k, v in config.items() if v.get('required', False)]
        if required_categories:
            first_required = required_categories[0]
            first_category = config[first_required]
            
            print(f"\n第一个必填类目 '{first_required}' 详情:")
            print(f"  描述: {first_category.get('description', '无')}")
            print(f"  选项:")
            
            for option_name, option_data in first_category.get('options', {}).items():
                keywords_sample = option_data.get('keywords', [])[:3]  # 显示前3个关键词
                keywords_str = ', '.join(keywords_sample)
                if len(option_data.get('keywords', [])) > 3:
                    keywords_str += '...'
                
                print(f"    * {option_name}: {keywords_str}")
        
        print("\n配置模块初始化成功!")
        print("\n使用说明:")
        print("  1. 导入配置管理器: from src.config import category_config_manager")
        print("  2. 获取配置: config = category_config_manager.get_config()")
        print("  3. 获取必填类目: required_categories = category_config_manager.get_required_categories()")
        print("  4. 启动热更新: hotreloader = start_config_hotreload()")
        
    except Exception as e:
        print(f"配置模块初始化失败: {str(e)}")